package template.method;

/**
 * @author shkstart
 * @date 2022/5/21 - 22:43
 */
// 抽象类的应用,模板方法的设计模式

//    理解为什么用模板:
//    因为有些代码的功能是非常确定的,基本不变的形式,而整段代码中变化的只有一小部分不确定的
//    而不确定的将其重写一下,当其造子类时重写这不确定的方法，然后去调用固定的即可
abstract public class ExampleTest {
    public static void main(String[] args) {
        Example example = new SubeExample();

        example.spendTime();
    }


}

abstract class  Example {
    public void spendTime() {

//         计算一段代码所花的时间
        long start = System.currentTimeMillis();
        this.code();//不确定部分

        long end = System.currentTimeMillis();

        System.out.println("花费的时间为:" + (end - start));

    }

    public abstract void code();
}

class SubeExample extends Example {
    public void code() {

        for(int i = 2; i <= 1000; i++) {
            boolean isFlag = true;
            for (int j = 2; j <= Math.sqrt(i); j++) {

                if(i % j == 0) {
                    isFlag = false;
                    break;
                }
                if(isFlag) {
                    System.out.println(i);
                }
            }
        }
    }
}
